home *** CD-ROM | disk | FTP | other *** search
- /* Kitchen.m - Model for simple kitchen
- * Copyright (C) 1993 Corona Design, Inc. All rights reserved.
- *
- * Abstract
- * This model shows a simple kitchen with a counter
- * and a bookcase on the wall.
- *
- * RCS path:
- * $Source: /Users/pkron/Projects/voxel/Pyramid/RCS/Kitchen.m,v $
- * Modified: $Date: 93/09/15 12:35:00 $ by $Author: pkron $
- * Current State: $State: Exp $ locked by $Locker: $
- */
-
- #import "Kitchen.h"
-
- #import "SpatialView.h"
-
-
- static void
- pointCopy( POINT *a, POINT *b)
- {
- (*a)[0] = (*b)[0];
- (*a)[1] = (*b)[1];
- (*a)[2] = (*b)[2];
- (*a)[3] = (*b)[3];
- }
-
-
- @implementation Kitchen
-
-
- // utility routine to draw a line
- // to a point in space
- - drawLineTo: (POINT *)aPoint
- {
- // map and project the point first
- map( transform, aPoint);
- project( aPoint);
- PSlineto( (*aPoint)[0], (*aPoint)[1]);
-
- return( self);
- }
-
-
- #define LIGHT_BROWN 127./255, 63./255, 19./255
- #define MEDIUM_BROWN 102./255, 51./255, 15./255
- #define BROWN 77./255, 39./255, 12./255
- #define DARK_BROWN 46./255, 23./255, 7./255
-
- #define GRAY 102./255, 102./255, 102./255
- #define LIGHT_GRAY 153./255, 153./255, 153./255
- #define DARK_GRAY 50./255, 50./255, 50./255
-
- - drawModel: (MATRIX)aTransform : (NXRect *)clip;
- {
- POINT distance;
-
- counterWidth = 1.0, counterDepth = .4;
- counterHeight = .3;
- shelfOriginY = .1, shelfOriginZ = .4, shelfHeight = .2;
- shelfWidth = .1, shelfDepth = .9;
-
- transform = aTransform;
-
- // X infinity
- distance[0] = -1000;
- distance[1] = 0;
- distance[2] = 0;
- distance[3] = 1;
- map( transform, &distance);
- project( &distance);
-
- // draw horizon
- PSmoveto( -10, distance[1] + .5);
- PSrlineto( 20, 0);
- PSsetlinewidth( 1);
- PSsetrgbcolor( 0, 1, 1);
- PSstroke();
-
- PSsetrgbcolor( GRAY); // DK Brown
- [self drawPlane: 0 : 0 : 0
- width: counterWidth : 0 : counterHeight];
- PSsetrgbcolor( DARK_GRAY);
- [self drawPlane: counterWidth : 0 : 0
- width: 0 : counterDepth : counterHeight];
- PSsetrgbcolor( LIGHT_GRAY);
- [self drawPlane: 0 : 0 : counterHeight
- width: counterWidth : counterDepth : 0];
-
- PSsetrgbcolor( MEDIUM_BROWN);
- [self drawPlane: 0 : shelfOriginY + shelfDepth : shelfOriginZ
- width: shelfWidth : 0 : shelfHeight];
-
- PSsetrgbcolor( DARK_BROWN);
- [self drawPlane: 0 : shelfOriginY : shelfOriginZ
- width: shelfWidth : shelfDepth : 0];
-
- PSsetrgbcolor( DARK_BROWN);
- [self drawPlane: 0 : shelfOriginY : shelfOriginZ
- width: 0 : shelfDepth : shelfHeight];
-
- PSsetrgbcolor( LIGHT_BROWN);
- [self drawPlane: 0 : shelfOriginY : shelfOriginZ + shelfHeight
- width: shelfWidth : shelfDepth : 0];
-
- PSsetrgbcolor( MEDIUM_BROWN);
- [self drawPlane: 0 : shelfOriginY : shelfOriginZ
- width: shelfWidth : 0 : shelfHeight];
-
- return( self);
- }
-
- // draw lines from key points
- // to infinite axis points
- - drawVanishingPoints: (MATRIX)aTransform : (NXRect *)clip;
- {
- POINT distance;
- POINT aPoint;
-
- // X infinity
- distance[0] = -1000;
- distance[1] = 0;
- distance[2] = 0;
- distance[3] = 1;
- map( transform, &distance);
- project( &distance);
-
- aPoint[0] = 0;
- aPoint[1] = 0;
- aPoint[2] = 0;
- aPoint[3] = 1;
- PSmoveto( distance[0], distance[1]);
- [self drawLineTo: &aPoint];
-
- aPoint[0] = 0;
- aPoint[1] = counterDepth;
- aPoint[2] = counterHeight;
- aPoint[3] = 1;
- PSmoveto( distance[0], distance[1]);
- [self drawLineTo: &aPoint];
-
- aPoint[0] = 0;
- aPoint[1] = 0;
- aPoint[2] = counterHeight;
- aPoint[3] = 1;
- PSmoveto( distance[0], distance[1]);
- [self drawLineTo: &aPoint];
-
- aPoint[0] = 0;
- aPoint[1] = shelfOriginY;
- aPoint[2] = shelfOriginZ;
- aPoint[3] = 1;
- PSmoveto( distance[0], distance[1]);
- [self drawLineTo: &aPoint];
-
- aPoint[0] = 0;
- aPoint[1] = shelfOriginY;
- aPoint[2] = shelfOriginZ + shelfHeight;
- aPoint[3] = 1;
- PSmoveto( distance[0], distance[1]);
- [self drawLineTo: &aPoint];
-
- PSsetrgbcolor( 1, 0, 0);
- PSsetlinewidth(0);
- PSstroke();
-
- // Y infinity
- distance[0] = 0;
- distance[1] = 1000;
- distance[2] = 0;
- distance[3] = 1;
- map( transform, &distance);
- project( &distance);
-
- aPoint[0] = counterWidth;
- aPoint[1] = counterDepth;
- aPoint[2] = 0;
- aPoint[3] = 1;
- PSmoveto( distance[0], distance[1]);
- [self drawLineTo: &aPoint];
-
- aPoint[0] = counterWidth;
- aPoint[1] = counterDepth;
- aPoint[2] = counterHeight;
- aPoint[3] = 1;
- PSmoveto( distance[0], distance[1]);
- [self drawLineTo: &aPoint];
-
- aPoint[0] = 0;
- aPoint[1] = shelfOriginY + shelfDepth;
- aPoint[2] = shelfOriginZ;
- aPoint[3] = 1;
- PSmoveto( distance[0], distance[1]);
- [self drawLineTo: &aPoint];
-
- aPoint[0] = 0;
- aPoint[1] = shelfOriginY + shelfDepth;
- aPoint[2] = shelfOriginZ + shelfHeight;
- aPoint[3] = 1;
- PSmoveto( distance[0], distance[1]);
- [self drawLineTo: &aPoint];
-
- aPoint[0] = shelfWidth;
- aPoint[1] = shelfOriginY + shelfDepth;
- aPoint[2] = shelfOriginZ;
- aPoint[3] = 1;
- PSmoveto( distance[0], distance[1]);
- [self drawLineTo: &aPoint];
-
- PSsetrgbcolor( 1, 0, 0);
- PSsetlinewidth(0);
- PSstroke();
-
- return( self);
- }
-
-
- // draw a spatial plane, given
- // its origin in 3-space and
- // the widths of its dimensions
- // (One width must be 0)
- - drawPlane: (float)x : (float)y : (float)z
- width: (float)wx :(float)wy : (float)wz
- {
- POINT space;
- POINT mapped;
-
- space[0] = x;
- space[1] = y;
- space[2] = z;
- space[3] = 1;
-
- pointCopy( &mapped, &space);
- map( transform, &mapped);
- project( &mapped);
- PSmoveto( mapped[0], mapped[1]);
-
- pointCopy( &mapped, &space);
- if ( wx EQ 0.0 )
- {
- mapped[1] += wy;
- [self drawLineTo: &mapped];
-
- pointCopy( &mapped, &space);
- mapped[1] += wy;
- mapped[2] += wz;
- [self drawLineTo: &mapped];
-
- pointCopy( &mapped, &space);
- mapped[2] += wz;
- [self drawLineTo: &mapped];
- }
-
- else if ( wy EQ 0.0 )
- {
- mapped[0] += wx;
- [self drawLineTo: &mapped];
-
- pointCopy( &mapped, &space);
- mapped[0] += wx;
- mapped[2] += wz;
- [self drawLineTo: &mapped];
-
- pointCopy( &mapped, &space);
- mapped[2] += wz;
- [self drawLineTo: &mapped];
- }
-
- else
- {
- mapped[0] += wx;
- [self drawLineTo: &mapped];
-
- pointCopy( &mapped, &space);
- mapped[0] += wx;
- mapped[1] += wy;
- [self drawLineTo: &mapped];
-
- pointCopy( &mapped, &space);
- mapped[1] += wy;
- [self drawLineTo: &mapped];
- }
-
- PSclosepath();
- PSfill();
-
- return( self);
- }
-
-
- @end
-
- #ifdef _LOG
- /*
- * $Log: Kitchen.m,v $
- Revision 1.1 93/09/15 12:35:00 pkron
- Created.
-
- */
- #endif
-